home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / asm_msc1.arc / EX55.ASM < prev    next >
Assembly Source File  |  1988-11-20  |  2KB  |  44 lines

  1. TITLE  Better Bubble Sort (EX55.ASM)
  2.           PAGE      ,132
  3. DATA      SEGMENT   PARA 'DATA'
  4. SAVE_CNT  DW        ?
  5. START_ADDR  DW      ?
  6. DATA      ENDS
  7. OUR_CODE  SEGMENT   PARA 'CODE'
  8.       PUBLIC    BUBBLE
  9. BUBBLE    PROC      FAR
  10.           ASSUME    CS:OUR_CODE,DS:DATA
  11.       PUSH        DS                 ;Save caller's registers
  12.       PUSH        CX
  13.       PUSH        AX             
  14.       PUSH        BX
  15.       MOV       AX,DATA         ;Initialize DS
  16.       MOV       DS,AX
  17.       MOV        START_ADDR,DI    ;Save starting address in memory
  18.       MOV        CX,ES:[DI]         ;Fetch element count
  19.       MOV        SAVE_CNT,CX         ;Save this value in memory
  20. INIT:      MOV        BX,1         ;Exchange flag (BX) = 1
  21.       DEC        SAVE_CNT         ;Get ready for count-1 compares
  22.       JZ        SORTED         ;Exit if SAVE_CNT is 0
  23.       MOV        CX,SAVE_CNT      ; and load this count into CX
  24.       MOV        DI,START_ADDR    ;Load start address into DI
  25. NEXT:      ADD        DI,2         ;Address a data element
  26.       MOV        AX,ES:[DI]         ; and load it into AX
  27.       CMP        ES:[DI+2],AX     ;Is next el. < this el.?
  28.       JAE        CONT         ; No.  Go check next pair
  29.       XCHG      ES:[DI+2],AX     ; Yes.  Exchange these elmts.
  30.       MOV        ES:[DI],AX
  31.       SUB        BX,BX         ; and make exchange flag 0
  32. CONT:      LOOP        NEXT         ;Process entire list
  33.       CMP        BX,0         ;Any exchanges made?
  34.       JE        INIT         ; If so, process list again
  35. SORTED:   MOV        DI,START_ADDR    ; If not, restore registers
  36.       POP        BX
  37.       POP        AX
  38.       POP        CX
  39.       POP        DS
  40.       RET                 ;  and exit.
  41. BUBBLE    ENDP
  42. OUR_CODE  ENDS
  43.          END       BUBBLE
  44.